/**
 * 对象继承
 */
export const extend = Object.assign

/**
 * 判断是否为对象类型
 * @param val - 需要判断的值
 * @returns 返回 true 或 false
 */
export const isObject = (val: any) => {
    return val != null && typeof val === 'object'
}

/**
 * 判断是否是 undefined
 * @param val - 需要判断的值
 * @returns 返回 true 或 false
 */
export const isUndefined = (val) => typeof val === 'undefined'

/**
 * 判断是否为 NaN
 * @param val - 需要判断的值
 * @returns 返回 true 或 false
 */
export const isNaN = (val) => val !== val

/**
 * 判断是否为数组
 */
export const isArray = Array.isArray

/**
 * 判断是否为字符串类型
 * @param value - 需要判断的值
 * @returns 返回 true 或 false
 */
export const isString = (value) => typeof value === 'string'

/**
 * 判断是否为 function 类型
 * @param value - 需要判断的值
 * @returns 返回 true 或 false
 */
export const isFunction = (value) => typeof value === 'function'

/**
 * 比较两个值是否发生了变化
 * @param Value - 原始值
 * @param newValue - 新值
 * @returns 返回 true 或 false
 */
export const hasChanged = (Value, newValue) => {
    return !Object.is(Value, newValue)
}

/**
 * 检查一个对象是否直接拥有某个属性
 * @param val - 需要判断的对象
 * @param key - 需要判断的属性
 * @returns 返回 true 或 false
 */
export const hasOwn = (val, key) => Object.prototype.hasOwnProperty.call(val, key)